928. Сумма наибольшего и наименьшего

 

Задан массив целых чисел. Определите сумму наименьшего и наибольшего элементов массива.

 

Вход. В первой строке задано количество элементов массива n (n ≤ 100). Во второй строке заданы n элементов массива, значение каждого из которых по модулю не превышает 100.

 

Выход. Выведите сумму наименьшего и наибольшего элементов массива.

 

Пример входа

Пример выхода

4

1 2 3 4

5

 

 

РЕШЕНИЕ

обработка массивов

 

Анализ алгоритма

Задачу можно решить:

·        при помощи цикла, вычисляя минимальный и максимальный элементы;

·        при помощи массива;

 

Реализация алгоритма

Читаем количество чисел n в массиве.

 

scanf("%d",&n);

 

В переменных min и max подсчитываем наименьшее и наибольшее число. Инициализируем переменные.

 

min = 100; max = -100;

 

Вычисляем минимальный и максимальный элементы во входном массиве. Данные читаем и обрабатываем на лету.

 

for(i = 0; i < n; i++)

{

  scanf("%d",&a);

  if (a < min) min = a;

  if (a > max) max = a;

}

 

Выводим сумму наименьшего и наибольшего элементов.

 

printf("%d\n",min + max);

 

Реализация – массив

Объявим массив m для хранения входной последовательности чисел.

 

int m[100];

 

Читаем входные данные.

 

scanf("%d", &n);

for (i = 0; i < n; i++)

  scanf("%d", &m[i]);

 

Вычисляем минимальный min и максимальный max элементы в массиве.

 

mn = 100; mx = -100;

for (i = 0; i < n; i++)

{

  if (m[i] < mn) mn = m[i];

  if (m[i] > mx) mx = m[i];

}

 

Выводим ответ.

 

printf("%d\n", mn + mx);

 

Реализация – динамический массив

 

#include <stdio.h>

 

int i, n, min, max;

int *m;

 

int main(void)

{

  scanf("%d",&n);

  m = new int[n];

 

  for(i = 0; i < n; i++)

    scanf("%d",&m[i]);

 

  min = max = m[0];

  //min = 100; max = -100;

 

  for(i = 0; i < n; i++)

  {

    if (m[i] < min) min = m[i];

    if (m[i] > max) max = m[i];

  }

 

  printf("%d\n",min + max);

  delete[] m;

 

  return 0;

}

 

Реализация при помощи библиотеки шаблонов STL

Объявим массив m для хранения входной последовательности чисел.

 

int m[101];

 

Читаем входные данные.

 

scanf("%d",&n);

for(i = 0; i < n; i++)

  scanf("%d",&m[i]);

 

Вычисляем сумму наименьшего и наибольшего элементов.

 

res = *min_element(m,m+n) + *max_element(m,m+n);

 

Выводим ответ.

 

printf("%d\n",res);

 

Реализация при помощи функции, которой в качестве параметра передается массив

 

#include <stdio.h>

 

int i, n, res, *m;

 

int GetMin(int *mas, int n)

{

  int i, min = 10000000;

  for(i = 0; i < n; i++)

    if (mas[i] < min) min = mas[i];

  return min;

}

 

int GetMax(int *mas, int n)

{

  int i, max = -10000000;

  for(i = 0; i < n; i++)

    if (mas[i] > max) max = mas[i];

  return max;

}

 

int main(void)

{

  scanf("%d",&n);

  m = new int[n];

  for(i = 0; i < n; i++)

    scanf("%d",&m[i]);

  res = GetMin(m,n) + GetMax(m,n);

  printf("%d\n",res);

  delete[] m;

  return 0;

}

 

Реализация на классах

 

#include <stdio.h>

 

int i, n, res, *m;

 

class Array

{

public:

   int *m;

   int len;

   Array(int n = 1)

   {

     len = n;

     m = new int[n];

   }

   int& operator[](int i)

   {

     return m[i];

   }

   int GetMax()

   {

     int i, max = -100000;

     for(i = 0; i < len; i++)

       if (m[i] > max) max = m[i];

     return max;

   }

   int GetMin()

   {

     int i, min = 100000;

     for(i = 0; i < len; i++)

       if (m[i] < min) min = m[i];

     return min;

   }

};

 

int main(void)

{

  scanf("%d",&n);

  Array m(n);

  for(i = 0; i < n; i++)

    scanf("%d",&m[i]);

  res = m.GetMin() + m.GetMax();

  printf("%d\n",res);

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int min = con.nextInt(), max = min;

    for(int i = 1; i < n; i++)

    {

      int val = con.nextInt();

      if (val < min) min = val;

      if (val > max) max = val;

    }

    System.out.println(min + max);

    con.close();

  }

}

 

Java реализация с инициализацией границ

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;

    for(int i = 1; i <= n; i++)

    {

      int val = con.nextInt();

      if (val < min) min = val;

      if (val > max) max = val;

    }

    System.out.println(min + max);

    con.close();

  }

}

 

Java реализация - ArrayList

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

 

    ArrayList<Integer> m = new ArrayList<Integer>();

    for(int i = 0; i < n; i++)

      m.add(con.nextInt());

   

    int min = Integer.MAX_VALUE;

    int max = Integer.MIN_VALUE;

    for(int i = 0; i < n; i++)

    {

      if (m.get(i) < min) min = m.get(i);

      if (m.get(i) > max) max = m.get(i);

    }

   

    System.out.println(min + max);

    con.close();

  }

}

 

Java реализация - классы

 

import java.util.*;

 

class Array

{

  int n;

  int m[];

 

  Array(int n)

  {

    this.n = n;

    m = new int[n];

  }

 

  void Set(int i, int val)

  {

    m[i] = val;

  }

 

  int GetMax()

  {

    int max = Integer.MIN_VALUE;

    for(int i = 0; i < n; i++)

      if (m[i] > max) max = m[i];

    return max;

  }

 

  int GetMin()

  {

    int min = Integer.MAX_VALUE;

    for(int i = 0; i < n; i++)

      if (m[i] < min) min = m[i];

    return min;

  } 

}

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    Array a = new Array(n);

   

    for(int i = 0; i < n; i++)

    {

      int val = con.nextInt();

      a.Set(i,val);

    }

   

    System.out.println(a.GetMin() + a.GetMax());

    con.close();

  }

}

 

Python реализация

Читаем входные данные.

 

n = int(input())

m = list(map(int,input().split()))

 

В переменных min и max подсчитываем наименьшее и наибольшее число. Инициализируем переменные.

 

min = max = m[0]

 

Находим минимальный min и максимальный max элементы в списке m.

 

for v in m:

  if v < min: min = v

  if v > max: max = v

 

Вычисляем и выводим сумму наименьшего и наибольшего элемента.

 

res = min + max

print (res)

 

Python реализация через min и max

Читаем входные данные.

 

n = int(input())

m = list(map(int,input().split()))

 

Выводим сумму наименьшего и наибольшего элементов.

 

print (min(m) + max(m))